延伸先前計算相關的方法測試,我們補齊加減乘除各種方法跟測試
public class Calculator {
    public int add(int x, int y) {
        return x + y;
    }
    public int subtract(int x, int y) {
        return x - y;
    }
    public int multiply(int x, int y) {
        return x * y;
    }
    public int divide(int x, int y) {
        if (y == 0) {
            throw new IllegalArgumentException("Cannot divide by zero");
        }
        return x / y;
    }
}
測試類也加上對應的測試
class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calc = new Calculator();
        int result = calc.add(1, 1);
        assertEquals(2, result);
    }
    @Test
    public void testSubtract() {
        Calculator calc = new Calculator();
        int result = calc.subtract(3, 1);
        assertEquals(2, result);
    }
    @Test
    public void testMultiply() {
        Calculator calc = new Calculator();
        int result = calc.multiply(3, 2);
        assertEquals(6, result);
    }
    @Test
    public void testDivide() {
        Calculator calc = new Calculator();
        int result = calc.divide(2, 2);
        assertEquals(1, result, "result should be 1");
        assertThrows(IllegalArgumentException.class, () -> {
            calc.divide(2, 0);
        });
    }
}
把這些註解都應用到我們的測試案例裡
class CalculatorTest {
    private Calculator calc;
    @BeforeEach
    void initCalculator() {
        System.out.println("-----每個項目執行前我都執行一次 @BeforeEach-----");
        calc = new Calculator();
    }
    @AfterEach
    void tearDownCalculator() {
        System.out.println("-----每個項目執行完我都執行一次 @AfterEach-----");
        calc = null;
    }
    @BeforeAll
    static void beforeAll() {
        System.out.println("=====全部開始前是我 @BeforeAll=====");
    }
    @AfterAll
    static void afterAll() {
        System.out.println("=====全部結束後是我 @AfterAll=====");
    }
    @Test
    @DisplayName("加法測試")
    public void testAdd() {
        System.out.println("執行 testAdd()");
        int result = calc.add(1, 1);
        assertEquals(2, result);
    }
    @Test
    @DisplayName("減法測試")
    public void testSubtract() {
        System.out.println("執行 testSubtract()");
        int result = calc.subtract(3, 1);
        assertEquals(2, result);
    }
    @Test
    public void testMultiply() {
        System.out.println("執行 testMultiply()");
        int result = calc.multiply(3, 2);
        assertEquals(6, result);
    }
    @Test
    @Disabled
    public void testDivide() {
        System.out.println("執行 testDivide()");
        int result = calc.divide(2, 2);
        assertEquals(1, result, "result should be 1");
        assertThrows(IllegalArgumentException.class, () -> {
            calc.divide(2, 0);
        });
    }
}
可以觀察到前面的方法因為都需要初始化 Calculator ,所以可以運用到 @BeforeEach 這個註解來幫我們讓程式碼更簡潔。
每個測試結束後也可以加入 @AfterEach 來進行特定處理,這邊就假設我們需要釋出空間把 calc 清空
依據測試需要也可以用 @BeforeAll @AfterAll 可以在最一開始及最後進行一些處理,不管你執行的是單項測試或是全部一起,這兩種都會最先和最後被執行。
@DisplayName 則是可以直接改變執行結果顯示的測試名稱
@Disabled 會跳過該項目,不被執行,但還是會在執行結果中顯示有被禁用
把每個執行都加上 log 之後可以看一下執行結果

可以看到對應的 log 就知道那些執行的順序,是否回想起這就是 AOP 的應用了!! 其實在測試撰寫的時候也都會用到這樣的概念。
Ref:
相關文章也會同步更新我的部落格,有興趣也可以在裡面找其他的技術分享跟資訊。